import {toast, clearStorageSync, getStorageSync} from '../utils/utils.js'
import config from '../config.js';
let BASE_URL = "";
let fileUrl = "";
const env = process.env.NODE_ENV;
import {i18n} from '../locale/index.js';
console.log('env',env);
if (env === "development") {
	console.log('当前环境是开发环境');
	// console.log(config.API_URL);
    BASE_URL = config.API_URL
	// console.log('BASE_URL',BASE_URL);
    fileUrl = config.API_URL+"/common/upload";
} else if (env === "production") {
	console.log('当前环境是生产环境');
   BASE_URL = config.API_URL
   fileUrl = config.API_URL+"/common/upload";
}else {
  console.log('当前环境是未知环境');
}
// 统一处理路径，参数，请求方式
uni.addInterceptor('request', {
    invoke(args) { //拦截前触发
		if (args.url.startsWith('http')) {
	      // 如果 URL 以 http 开头，认为是绝对路径，不拼接 baseUrl
	      return args;
	    } else {
	      // 否则拼接全局 baseUrl
		  // console.log('BASE_URL2',BASE_URL);
	      args.url = BASE_URL + args.url
	      args.header["Content-Type"] = "application/x-www-form-urlencoded"
		  args.timeout = 15*1000  // 请求超时 15秒
	      //设置带token请求头
	      if (getStorageSync('H5STOCK_USERINFO')) args.header["token"] = getStorageSync('H5STOCK_USERINFO').token
	    }
        
    },
    success(args) { //成功回调拦截
        if (!args || !args.statusCode) {
			return Promise.reject("错误的消息内容。");
        }
        //处理状态码
        if (args.statusCode !== 200) {
            if(args.statusCode === 401){
                toast(i18n.global.t('Login_expired'))
                clearStorageSync()
                // setTimeout(() => {
					uni.redirectTo({
						url: '/pages/login/login'
					})
					// uni.navigateTo({
					// 	url: '/pages/mine/subpage/login'
					// })
                // },1000)
            }else{
                console.log(args,'args');
                toast(args.message || i18n.global.t('requestFail'))
            }
            return Promise.resolve({ data: { code: args.statusCode,message:i18n.global.t('requestFail')} });
        }else{
            if (!args.data || !args.data.code) {
				console.log('args',args);
                return Promise.resolve(args.data);
            }
            //处理消息码
            if (args.data && args.data.code !== 1) {
                if (args.data.code === 401) {
					clearStorageSync()
                    toast(i18n.global.t('login_tips'))
                    // setTimeout(() => {
                        //调转到登录页面
					   // uni.navigateTo({
							// url: "/pages/mine/subpage/login",
					   // });	
					   uni.redirectTo({
					   	url: '/pages/login/login'
					   })
                    // }, 1000);
                    return Promise.resolve(args.data);
				// }else if(args.data.code === 10010){  //未实名
				// 	// toast(i18n.global.t('conotrequest'))
				// 	uni.showToast({
				// 		title:args.data.msg,
				// 		icon:'none',
				// 	})
				// 	setTimeout(() => {
				// 		uni.navigateTo({
				// 			url: 'pages/personal/verify/verify',
				// 		});
				// 	}, 2000);
				// }else if(args.data.code === 10111){  //未设置交易密码
				// 	toast(i18n.global.t('未设置交易密码'))
				// 	setTimeout(()=>{
				// 		uni.navigateTo({
				// 			url:'/pages/property/subPage/accountSettings'
				// 		})
				// 	},600)
				// }else if(args.data.code === 10210){  //未设置钱包地址
				// 	toast(i18n.global.t('未设置钱包地址'))
				// 	setTimeout(() => {
				// 		uni.navigateTo({
				// 			url: '/pages/property/subPage/accountSettings',
				// 		});
				// 	}, 2000);
				}else{
					// toast(args.data.msg || i18n.global.t('conotrequest'))
					return Promise.resolve(args.data);
				}
            }
        }
        //返回消息 
        return Promise.resolve(args.data)
    },
    fail() { 
		//失败回调拦截
		console.log('无法发起请求');
        // toast(i18n.global.t('conotrequest'))
    },
})

// 同时发送异步代码的次数，防止一次点击中有多次请求，用于处理
let ajaxTimes = 0;
const baseRequest = async (url, method, data, header) => {
    ajaxTimes++;
    // uni.showLoading({
    //     title: i18n.global.t('loading'),
    //     mask: true,
    // })
    const promise = new Promise((resolve, reject) => {
        uni.request({
            url: url,
            data: data,
            method:method || 'GET',
            header: header?header:{}, 
			timeout:15*1000,
            success: (res) => {
				//上面已经对错误进行了处理，直接返回的就是data
				resolve(res);
            },
            fail: (err) => {
				reject(err)
            },
            // 完成之后关闭加载效果
            complete: () => {
				ajaxTimes--;
				// if (ajaxTimes === 0) uni.hideLoading();
            }
        });
    });
    return Promise.resolve(promise);
}
const uploadFile = (filePath) => {
	return new Promise((resolve, reject) => {
        let header={};  
		header["token"] = getStorageSync('H5STOCK_USERINFO')? getStorageSync('H5STOCK_USERINFO').token:''
		uni.showLoading({
			title:i18n.global.t('uploading')
		})
		uni.uploadFile({
			url: fileUrl, //仅为示例，非真实的接口地址
			filePath: filePath,
			name: 'file',
			formData: {
				'user': 'test'
			},
			header: header,
			success: (res) => {
				let data = JSON.parse(res.data)
				if(data.code==401){
					clearStorageSync()
					uni.reLaunch({
						url:'/pages/login/login'
					})
				}else{
					resolve(data)
				}
			},
			fail: (err) => {
				let result = {
					code: 500,
					msg: i18n.global.t('requestFail')
				};
				reject(result)
			},
			complete() {
				uni.hideLoading()
				// console.log('完成了');
			}
		});
	})
}
const request = {};
['options', 'get', 'post', 'put', 'head', 'delete', 'trace', 'connect'].forEach((method) => {
    request[method] = (api, data, header) => baseRequest(api, method, data, header)
})
export default { request, uploadFile }